From 11e1149fe08e2e9a478696cc1c3b331e6b8e4efa Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Wed, 8 Apr 2009 19:13:04 +0100 Subject: [PATCH] tools: Always use sane upstream (`native') python paths Previously, by default we would install our python modules into /usr/lib/python/xen, for example /usr/lib/python/xen/__init__.py. Upstream python's standard install location (a) includes the Python version number and (b) puts things in site-packages by default. Our best conjecture for the reason for this was an attempt to make the installs portable between different python versions. However, that doesn't work because compiled python modules (.pyc), and C python extensions corresponding to one version of python, are not compatible across different versions of python. This is why upstream include the version number. site-packages is the standard location for locally-installed packages and is automatically included on the python search path. In this change, we abandon our own unusual python path setup: * Invoke setup.py in an entirely standard manner. We pass PREFIX and DESTDIR using the appropriate options provided by setup.py for those purposes (adding them to setup.py calls which were previously lacking them). * Since the installation locations are now on the standard python path, we no longer need to add anything to the path in any of our python utilities. Therefore remove all that code from every python script. (Many of these scripts unconditionally added /usr/lib/python and /usr/lib64/python which is wrong even in the old world.) * There is no longer any special `Xen python path'. xen-python-path is no longer needed. It is no longer called by anything in our tree. However since out-of-tree callers may still invoke it, we retain it. It now prints a fixed string referring to a directory which does not to exist; callers (who use it to augment their python path) will thus add a nonexistent directory to their python path which is harmless. * Remove various workarounds including use of setup.py --home (which is intended for something completely different). * Remove tests for the XEN_PYTHON_NATIVE_INSTALL build-time environment variable. The new behaviour is the behaviour which we should have had if this variable had been set. That is, it is now as if this variable was always set but also bugs in the resulting install have been fixed. This should be a proper fix for the bug addressed by c/s 19515. Signed-off-by: Ian Jackson --- Makefile | 6 +--- tools/misc/sxp-pretty | 8 ----- tools/misc/xen-bugtool | 3 -- tools/misc/xen-python-path | 31 +++---------------- tools/misc/xend | 8 ----- tools/misc/xm | 3 -- tools/misc/xsview | 2 -- tools/pygrub/Makefile | 9 ++---- tools/pygrub/src/pygrub | 2 -- tools/python/Makefile | 8 ++--- tools/python/scripts/test_hvm_create.py | 1 - tools/python/scripts/test_vm_create.py | 1 - tools/python/scripts/xapi.py | 1 - tools/security/Makefile | 10 ++---- .../security/python/xensec_tools/acm_getlabel | 4 --- tools/security/xensec_gen.py | 4 --- tools/sv/index.psp | 1 - tools/vnet/scripts/vn | 3 -- 18 files changed, 11 insertions(+), 94 deletions(-) diff --git a/Makefile b/Makefile index 131ab3d1a3..237c107ff0 100644 --- a/Makefile +++ b/Makefile @@ -188,11 +188,7 @@ help: @echo ' clean-tboot - clean the tboot module if it exists' @echo @echo 'Environment:' - @echo ' XEN_PYTHON_NATIVE_INSTALL=y' - @echo ' - native python install or dist' - @echo ' install into prefix/lib/python' - @echo ' instead of /lib/python' - @echo ' true if set to non-empty value, false otherwise' + @echo ' [ this documentation is sadly not complete ]' # Use this target with extreme care! .PHONY: uninstall diff --git a/tools/misc/sxp-pretty b/tools/misc/sxp-pretty index 4b8eaed335..dd642b088e 100644 --- a/tools/misc/sxp-pretty +++ b/tools/misc/sxp-pretty @@ -23,14 +23,6 @@ import os.path import pprint import sys -result = commands.getstatusoutput(os.path.join(os.path.dirname(sys.argv[0]), - 'xen-python-path')) -if result[0] != 0: - print >>sys.stderr, result[1] - sys.exit(1) - -sys.path.append(result[1]) - import xen.xend.sxp as sxp def main(): diff --git a/tools/misc/xen-bugtool b/tools/misc/xen-bugtool index cf41c8c957..a3742b4787 100644 --- a/tools/misc/xen-bugtool +++ b/tools/misc/xen-bugtool @@ -6,9 +6,6 @@ import sys -sys.path.append('/usr/lib/python') -sys.path.append('/usr/lib64/python') - from xen.util import bugtool diff --git a/tools/misc/xen-python-path b/tools/misc/xen-python-path index 57774a332b..073abaef53 100644 --- a/tools/misc/xen-python-path +++ b/tools/misc/xen-python-path @@ -17,31 +17,8 @@ # Copyright (C) 2007 XenSource Inc. #============================================================================ +# Nowadays we install xen in the standard python site-packages +# directories. This script is still provided for the benefit of old +# out-of-xen-tree callers. It is deprecated and will be removed. -# Use the auxbin module in Xend to determine the correct Python path. We -# take the first installed instance of auxbin that we find, and then run it -# to determine the correct path, appending that to sys.path. - -AUXBIN = 'xen/util/auxbin.py' - -import os -import os.path -import sys - -usr = os.path.dirname(os.path.dirname(sys.argv[0])) -list = [ os.path.join(usr,'lib64') ] -list += [ os.path.join(usr,'lib') ] -list += ['/usr/lib64', '/usr/lib'] - -for l in list: - for p in ['python%s' % sys.version[:3], 'python']: - for k in ['', 'site-packages/']: - d = os.path.join(l, p, k) - if os.path.exists(os.path.join(d, AUXBIN)): - sys.path.append(d) - import xen.util.auxbin - print os.path.join(xen.util.auxbin.libpath(), p) - sys.exit(0) - -print >>sys.stderr, "Cannot find Xen Python modules." -sys.exit(1) +print '/dev/enoent/xen/python-path' diff --git a/tools/misc/xend b/tools/misc/xend index 2cbdf6175c..4dd550bbed 100644 --- a/tools/misc/xend +++ b/tools/misc/xend @@ -33,14 +33,6 @@ import signal import time import commands -xpp = os.path.join(os.path.dirname(sys.argv[0]), 'xen-python-path') -if os.path.exists(xpp): - result = commands.getstatusoutput(xpp) - if result[0] != 0: - print >>sys.stderr, result[1] - sys.exit(1) - sys.path.append(result[1]) - from xen.xend.server import SrvDaemon class CheckError(ValueError): diff --git a/tools/misc/xm b/tools/misc/xm index 80972ccef9..f4fd200346 100755 --- a/tools/misc/xm +++ b/tools/misc/xm @@ -2,9 +2,6 @@ # -*- mode: python; -*- import sys -# add fallback path for non-native python path installs if needed -sys.path.append('/usr/lib/python') -sys.path.append('/usr/lib64/python') from xen.xm import main main.main(sys.argv) diff --git a/tools/misc/xsview b/tools/misc/xsview index c6726554b7..f926fe4fc6 100644 --- a/tools/misc/xsview +++ b/tools/misc/xsview @@ -2,8 +2,6 @@ import sys -sys.path.append('/usr/lib/python') -sys.path.append('/usr/lib64/python') from xen.xsview import main main.main(sys.argv) diff --git a/tools/pygrub/Makefile b/tools/pygrub/Makefile index 0e30db481c..0791012e2a 100644 --- a/tools/pygrub/Makefile +++ b/tools/pygrub/Makefile @@ -9,15 +9,10 @@ build: CC="$(CC)" CFLAGS="$(CFLAGS)" python setup.py build .PHONY: install -ifndef XEN_PYTHON_NATIVE_INSTALL install: all - CC="$(CC)" CFLAGS="$(CFLAGS)" python setup.py install --root="$(DESTDIR)" --home="$(PREFIX)" --prefix="" --force + CC="$(CC)" CFLAGS="$(CFLAGS)" python setup.py install \ + --prefix="$(PREFIX)" --root="$(DESTDIR)" --force $(INSTALL_DIR) $(DESTDIR)/var/run/xend/boot -else -install: all - CC="$(CC)" CFLAGS="$(CFLAGS)" python setup.py install --root="$(DESTDIR)" - $(INSTALL_DIR) $(DESTDIR)/var/run/xend/boot -endif .PHONY: clean clean: diff --git a/tools/pygrub/src/pygrub b/tools/pygrub/src/pygrub index e43dcc2d9a..095db5e72c 100644 --- a/tools/pygrub/src/pygrub +++ b/tools/pygrub/src/pygrub @@ -21,8 +21,6 @@ import platform import curses, _curses, curses.wrapper, curses.textpad, curses.ascii import getopt -sys.path = [ '/usr/lib/python', '/usr/lib64/python' ] + sys.path - import fsimage import grub.GrubConf import grub.LiloConf diff --git a/tools/python/Makefile b/tools/python/Makefile index 700640645b..cbc3973d02 100644 --- a/tools/python/Makefile +++ b/tools/python/Makefile @@ -54,13 +54,9 @@ refresh-po: $(POTFILE) $(MSGFMT) -c -o $@ $< .PHONY: install -ifndef XEN_PYTHON_NATIVE_INSTALL install: install-messages install-dtd - CC="$(CC)" CFLAGS="$(CFLAGS)" python setup.py install --root="$(DESTDIR)" --home="$(PREFIX)" --prefix="" --force -else -install: install-messages install-dtd - CC="$(CC)" CFLAGS="$(CFLAGS)" python setup.py install --root="$(DESTDIR)" --force -endif + CC="$(CC)" CFLAGS="$(CFLAGS)" python setup.py install \ + --prefix="$(PREFIX)" --root="$(DESTDIR)" --force install-dtd: all $(INSTALL_DIR) $(DESTDIR)$(DOCDIR) diff --git a/tools/python/scripts/test_hvm_create.py b/tools/python/scripts/test_hvm_create.py index 35abfe0396..50203635da 100644 --- a/tools/python/scripts/test_hvm_create.py +++ b/tools/python/scripts/test_hvm_create.py @@ -74,7 +74,6 @@ console_cfg = { import sys import time -sys.path.append('/usr/lib/python') from xapi import connect, execute diff --git a/tools/python/scripts/test_vm_create.py b/tools/python/scripts/test_vm_create.py index 6575f153ea..9ac8a6eee2 100644 --- a/tools/python/scripts/test_vm_create.py +++ b/tools/python/scripts/test_vm_create.py @@ -93,7 +93,6 @@ console_cfg = { import sys import time -sys.path.append('/usr/lib/python') from xapi import connect, execute diff --git a/tools/python/scripts/xapi.py b/tools/python/scripts/xapi.py index 1a07795212..9530f4a151 100644 --- a/tools/python/scripts/xapi.py +++ b/tools/python/scripts/xapi.py @@ -20,7 +20,6 @@ import sys import time import re import os -sys.path.append('/usr/lib/python') from xen.util.xmlrpclib2 import ServerProxy from optparse import * diff --git a/tools/security/Makefile b/tools/security/Makefile index 61062715a2..996e96599a 100644 --- a/tools/security/Makefile +++ b/tools/security/Makefile @@ -40,9 +40,6 @@ ifeq ($(ACM_SECURITY),y) all: build .PHONY: install -ifndef XEN_PYTHON_NATIVE_INSTALL -install: LIBPATH=$(shell PYTHONPATH=../python/xen/util python -c "import auxbin; print auxbin.libpath()") -endif install: all $(ACM_CONFIG_FILE) $(INSTALL_DIR) $(DESTDIR)$(SBINDIR) $(INSTALL_PROG) $(ACM_INST_TOOLS) $(DESTDIR)$(SBINDIR) @@ -63,11 +60,8 @@ install: all $(ACM_CONFIG_FILE) $(INSTALL_DATA) $(ACM_INST_HTML) $(DESTDIR)$(ACM_SECGEN_HTMLDIR) $(INSTALL_DIR) $(DESTDIR)$(ACM_SECGEN_CGIDIR) $(INSTALL_PROG) $(ACM_INST_CGI) $(DESTDIR)$(ACM_SECGEN_CGIDIR) -ifndef XEN_PYTHON_NATIVE_INSTALL - python python/setup.py install --install-lib="$(DESTDIR)$(LIBPATH)/python" -else - python python/setup.py install --root="$(DESTDIR)" -endif + python python/setup.py install \ + --prefix="$(PREFIX)" --root="$(DESTDIR)" --force else .PHONY: all all: diff --git a/tools/security/python/xensec_tools/acm_getlabel b/tools/security/python/xensec_tools/acm_getlabel index 63137a9993..8d5fe22461 100644 --- a/tools/security/python/xensec_tools/acm_getlabel +++ b/tools/security/python/xensec_tools/acm_getlabel @@ -4,10 +4,6 @@ import sys import traceback import getopt -# add fallback path for non-native python path installs if needed -sys.path.insert(-1, '/usr/lib/python') -sys.path.insert(-1, '/usr/lib64/python') - from xen.util.security import ACMError, err, get_ssid # getopt.gnu_getopt is better, but only exists in Python 2.3+. Use diff --git a/tools/security/xensec_gen.py b/tools/security/xensec_gen.py index 8f65b4cf1a..d531777660 100644 --- a/tools/security/xensec_gen.py +++ b/tools/security/xensec_gen.py @@ -17,10 +17,6 @@ import sys -# Add fallback path for non-native python path installs if needed -sys.path.append( '/usr/lib/python' ) -sys.path.append( '/usr/lib64/python' ) - from xen.xensec_gen import main main.main( ) diff --git a/tools/sv/index.psp b/tools/sv/index.psp index 192aff84fa..829d468db4 100755 --- a/tools/sv/index.psp +++ b/tools/sv/index.psp @@ -1,6 +1,5 @@ <% import sys -sys.path.append( "/usr/lib/python" ) debug = True and False diff --git a/tools/vnet/scripts/vn b/tools/vnet/scripts/vn index 8e8e224d4b..4a4281f6f1 100644 --- a/tools/vnet/scripts/vn +++ b/tools/vnet/scripts/vn @@ -27,9 +27,6 @@ import socket import sys from getopt import getopt, GetoptError -sys.path.append('/usr/lib/python') -sys.path.append('/usr/lib64/python') - from xen.xend import sxp from xen.xend.PrettyPrint import prettyprint -- 2.30.2